package org.aerie.forest.core.frame.rebar.entity.processer;

import org.aerie.forest.core.frame.rebar.entity.AbstractForestRebar;
import org.aerie.forest.core.frame.rebar.entity.AbstractForestValidityCheck;

/**
 * @description forest处理器
 * @param <T> 处理的包的类型
 * @param <E> 包处理返回类型
 * 
 * @author quark
 * @organization aerie
 * @date 2020年2月28日 下午3:14:06
 * @version 1.2.0
 * 
 * @revision 2.2.1
 */
public abstract class AbstractForestProcessor<T extends ProcessPack, E> extends AbstractForestRebar {

	/**
	 * @description 合法性校验块
	 * 
	 * @author quark
	 * @date 2020年5月12日 上午10:39:49
	 * @version 1.2.0
	 * 
	 * @revision 2.2.1
	 */
	private final AbstractForestValidityCheck<AbstractForestProcessor<T,E>> forestValidityCheck = new AbstractForestValidityCheck<AbstractForestProcessor<T,E>>(
			"") {

		@Override
		protected void beginCheck(AbstractForestRebar forestRebar) {
			LOGGER.info("待设置");
		}
	};

	/**
	 * Construction
	 * 
	 * @param forestRebarName 处理器的名称
	 *
	 * @date 2020年4月21日 下午5:52:10
	 * @version 1.2.0
	 */
	protected AbstractForestProcessor(String forestRebarName) {
		super(forestRebarName);
		calibrator.addValidityCheck(forestValidityCheck);
	}

	/**
	 * @description 执行处理动作
	 * @param t 被处理的包
	 *
	 * @author quark
	 * @date 2020年10月26日 下午10:09:24
	 * @version 2.2.1
	 */
	public final E executeProcess(T t) {
		return analysisPack(t);
	}

	/**
	 * @description 解析包
	 *
	 * @author quark
	 * @date 2020年10月26日 下午10:25:43
	 * @version 2.2.1
	 */
	protected abstract E analysisPack(T t);
}
